// import store from '@/store/index'
import config from '@/common/config';
// 定义定时器变量
let timer = null;
// 节流
function throttle(func, wait = 500) {
  // 存在定时器，则不处理
  if (timer) return;
  // 设置定时器
  timer = setTimeout(() => {
    typeof func === 'function' && func();
    timer = null;
  }, wait);
}

const request = function ({
  url,
  method,
  isJson = false,
  data = {},
  token = null,
  headers = {},
  isShowToast = true, // 是否需要显示错误提醒
}) {
  const contentType = isJson
    ? 'application/json'
    : 'application/x-www-form-urlencoded';
  return new Promise((resolve, reject) => {
    try {
      uni.request({
        url: config.baseUrl + url,
        sslVerify: false, //  忽略 SSL 证书校验:注意：这可能不工作，因为uni-app的标准API不直接支持此选项,只作用于app
        // sslVerify: true, // 保持开启
        // certificate: {
        //   path: '/static/117.133.135.146.pem', // 证书存放路径
        //   name: 'My Server Certificate',
        // },
        data,
        method,
        timeout: 10000,
        header: {
          'Access-Ajax': 1,
          'content-type': contentType,
          clientid: uni.getStorageSync('clientid'),
          authorization: `Bearer ${token || uni.getStorageSync('token')}`,
          'X-App-Key': 'app',
          ...headers,
        },
        success(res) {
          if (res.data.code == 401) {
            uni.clearStorageSync();
            // 节流多次接口请求
            throttle(() => {
              uni.showModal({
                title: '温馨提示',
                content: '您的登录已过期！',
                confirmText: '前往登录',
                confirmColor: '#FF884D',
                success: (s) => {
                  if (s.confirm) {
                    // 使用reLaunch，小程序内关闭所有页面，导致hideTabBar失效
                    // uni.navigateTo—保留当前页跳转
                    // uni.redirectTo—关闭当前页跳转
                    uni.redirectTo({
                      // url: '/pages/laundry/index', // 洗衣房
                      url: '/pages/login/index',
                    });
                  }
                  uni.hideLoading();
                },
              });
              reject();
            });
          } else if (res.data.code == 508) {
            uni.navigateTo({
              url: `/pages/article/anomaly?msg=${res.data.msg}`,
            });
          } else if (res.data.code == 200) {
            resolve(res.data);
          } else if (isShowToast) {
            reject(res.data);
            let msg = res.data.msg
              ? res.data.msg
              : '页面出现了一点问题，请及时联系管理员解决！';
            uni.showToast({
              icon: 'none',
              title: '错误提醒: ' + msg,
              duration: 3000,
            });
          }
        },
        fail(e) {
          reject(e);
          uni.showToast({
            icon: 'none',
            title: '网络错误，请稍后重试',
            duration: 3000,
          });
        },
        complete(res) {
          if (res.statusCode === 504) {
            reject(res);
            uni.showToast({
              title: '请求超时！',
              icon: 'none',
            });
          }
        },
      });
    } catch (e) {
      console.error(new Error(e));
      reject(e);
    }
  });
};

export default request;
